//
// Created by WuYong on 2021/12/22.
//

#ifndef SEQUENCE_QUEUE_SEQUENCE_QUEUE_H
#define SEQUENCE_QUEUE_SEQUENCE_QUEUE_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define QUEUE_INIT_SIZE 100 //存储空间初始分配量
#define QUEUE_INCREMENT 10   //存储空间分配增量


enum Status{OK=1,ERROR=-2,TRUE=1,FALSE=0,EMPTY=-1,OVERFLOW=-3};
typedef enum Status Status;

typedef int SElemType;  //自定义元素类型

typedef struct {

    SElemType *Head;    //在队列构造之前和销毁之后，base的值为NULL
    SElemType *Tail;     //队头指针
    int QueueSize;      //当前已分配的存储空间，以元素为单位
}SqQueue;

Status InitQueue(SqQueue *Q);   //构造一个空队
Status DestroyQueue(SqQueue *Q);    //销毁队Q，Q不再存在
Status ClearQueue(SqQueue *Q);  //把Q置为空队
Status QueueEmpty(SqQueue Q);   //若Q为空队返回TRUE，否则返回FALSE
int QueueLength(SqQueue Q);     //返回Q的元素个数，即队的长度
SElemType* GetHead(SqQueue Q);  //若队不空，则返回队头元素，否则返回NULL
Status EnQueue(SqQueue *Q,SElemType e);    //插入元素e为
SElemType DeQueue(SqQueue *Q);  //若队不空，则删除队头元素并返回，否则返回
Status QueueTraverse(SqQueue Q,Status (*visit)(SElemType));     //从栈底到栈顶一次对队中每个元素调用函数visit（），一旦visit（）失败，则返回ERROR

#endif //SEQUENCE_QUEUE_SEQUENCE_QUEUE_H
